package com.laogao.lesson047.tenant;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * <b>description</b>： Java进阶、性能优化实战案例100讲，微信公众号:程序员恰恰，源码 & 文档 & 技术支持，请加个人微信号：it3306 <br>
 * <b>time</b>：2025/5/10 16:16 <br>
 * <b>author</b>：ready lao_gao
 */
@Configuration
public class MyBatisPlusConfiguration {
    /**
     * MybatisPlusInterceptor 是 MyBatis-Plus 提供的一个拦截器框架，
     * 允许开发者通过添加内部拦截器（InnerInterceptor）来扩展功能。
     *
     * 当执行 SQL 查询时，MybatisPlusInterceptor 会触发 TenantLineInnerInterceptor。
     * TenantLineInnerInterceptor 会调用 CustomTenantHandler 的方法，动态地在 SQL 中添加租户过滤条件。
     *
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(this.tenantLineInnerInterceptor());
        return interceptor;
    }

    /**
     * 一个多租户相关的拦截器。
     *
     * @return
     */
    @Bean
    public TenantLineInnerInterceptor tenantLineInnerInterceptor() {
        return new TenantLineInnerInterceptor(this.customTenantHandler());
    }

    @Bean
    public CustomTenantHandler customTenantHandler() {
        return new CustomTenantHandler();
    }
}
